package com.gin.no_gay_alliance.manager;

import android.content.res.Configuration;

import androidx.annotation.StyleRes;

import com.gin.no_gay_alliance.R;
import com.gin.no_gay_alliance.app.MyApplication;
import com.gin.no_gay_alliance.enums.ThemeNga;
import com.gin.no_gay_alliance.utils.DataStoreUtils;

/**
 * 主题管理器
 *
 * @author : ginstone
 * @version : v1.0.0
 * @since : 2023/8/18 16:41
 **/
public class ThemeManager {
    public static final String TAG = ThemeManager.class.getSimpleName();
    /**
     * DataStore保存当前主题的key
     */
    public static final String DATA_STORE_KEY_THEME = "theme";
    /**
     * DataStore保存是否跟随系统深色主题key
     */
    public static final String DATA_STORE_KEY_FOLLOW_UI = "follow_ui";
    DataStoreUtils dataStoreUtils = DataStoreUtils.getInstance();

    /**
     * 当前系统是否处于深色模式下
     *
     * @return 当前系统是否处于深色模式下
     */
    public static boolean getDarkModeStatus() {
        int mode = MyApplication.app.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
        return mode == Configuration.UI_MODE_NIGHT_YES;
    }

    /**
     * 获取当前是否跟随系统深色主题
     *
     * @return 当前是否跟随系统深色主题
     */
    public boolean getFollowUi() {
        return dataStoreUtils.get(DATA_STORE_KEY_FOLLOW_UI, false);
    }

    /**
     * 设置是否跟随系统深色主题
     *
     * @param follow 是否跟随
     */
    public void setFollowUi(boolean follow) {
        dataStoreUtils.set(DATA_STORE_KEY_FOLLOW_UI, follow);
    }

    /**
     * 获取当前主题
     *
     * @return 当前主题
     */
    public ThemeNga getTheme() {
        return ThemeNga.find(dataStoreUtils.get(DATA_STORE_KEY_THEME, ThemeNga.YELLOW.ordinal()));
    }

    /**
     * 修改主题
     *
     * @param theme 主题
     */
    public void setTheme(ThemeNga theme) {
        dataStoreUtils.set(DATA_STORE_KEY_THEME, theme.ordinal());
    }

    /**
     * 返回当前应当使用的主题id
     *
     * @return 主题id
     */
    @StyleRes
    public int getThemeResId() {
        if (getFollowUi() && getDarkModeStatus()) {
            // 当前为深色模式且跟随系统设置，设置为黑色主题
            return R.style.Theme_Nga_Black;
        } else {
            // 否则使用选择的主题
            ThemeNga theme = getTheme();
            switch (theme) {
                case BLACK:
                    return R.style.Theme_Nga_Black;
                case GREEN:
                    return R.style.Theme_Nga_Green;
                case YELLOW:
                default:
                    return R.style.Theme_Nga_Yellow;
            }
        }
    }
}
